package com.touka.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.touka.common.CustomException;
import com.touka.entity.Category;
import com.touka.entity.Dish;
import com.touka.entity.Setmeal;
import com.touka.mapper.CategoryMapper;
import com.touka.service.CategoryService;
import com.touka.service.DishService;
import com.touka.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
  @Autowired
  private DishService dishService;
  @Autowired
  private SetmealService setmealService;
  @Autowired
  private CategoryMapper categoryMapper;

  /**
   * 根据id删除分类，删除之前需要进行判断
   *
   * @param id
   */
  @Override
  public void delete(Long id) {
    LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
    // 添加查询条件，根据分类id进行查询
    dishLambdaQueryWrapper.eq(Dish::getCategoryId, id);

    // 查询当前分类是否关联了菜品，如果已经关联，抛出一个异常
    int dishCount = dishService.count(dishLambdaQueryWrapper);
    if (dishCount > 0) {
      // 已经关联菜品，抛出一个业务异常
      throw new CustomException("当前分类下关联了菜品，不能删除");
    }

    // 查询当前分类是否关联了套餐
    LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
    setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId, id);
    int setmealCount = setmealService.count(setmealLambdaQueryWrapper);
    if (setmealCount > 0) {
      // 已经关联套餐，抛出一个异常
      throw new CustomException("当前分类下关联了套餐，不能删除");
    }

    // 正常删除分类
    super.removeById(id);
  }

  @Override
  public Category getByName(String name) {
    Category category = categoryMapper.getByName(name);
    return category;
  }

  @Override
  public void updateIsDeleted(Long id, Integer sort) {
    categoryMapper.updateIsDeleted(id, sort);
  }
}
